package com.apiauto.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Locale;

import com.apiauto.log.Log;

/**
 * PS:mock服务工具类
 * @author lkk
 *
 */
public class MockUtil{
	/**
	 * PS:启动mock服务
	 */
	public static void startMock() {
		// 获取文件对象
		File mockfile = new File("moco/mock.json");
		FileOutputStream fos = null;
		Runtime runtime = Runtime.getRuntime();
		//获取系统名
		String os_Name = System.getProperty("os.name").toLowerCase(Locale.US);
		//执行文件路径
		String exFilePath = null;
		try {
			if(os_Name.toUpperCase().contains("WINDOWS")) {
				// 文件目录
				String filePath = mockfile.getCanonicalPath();
				// 切换目录指令
				String catCatalogue = "cd "+filePath.replace("\\mock.json", "");
				// 切换盘符指令
				String catDrive = filePath.substring(0, filePath.indexOf(":")) + ":";
				// 启动moco指令
				String mocoOrder = "java -jar moco-runner-0.11.0-standalone.jar http -p 7878 -c mock.json";
				// 写入文件的数据
				String data = catDrive+"\n"+catCatalogue+"\n"+mocoOrder+"\n"+"pause";
				// 文件输出流,生成执行文件
				fos = new FileOutputStream("moco/mock.bat");
				// 写入数据
				fos.write(data.getBytes());
				// 强制写出缓冲区数据
				fos.flush();
				// 关闭文件输出流
				fos.close();
				//获取执行文件对象
				File batfile = new File("moco/mock.bat");
				//获取执行文件路径
				exFilePath = batfile.getCanonicalPath();
			}else {
				// 文件输出流,生成执行文件
				fos = new FileOutputStream("moco/mock.sh");
				// 获取文件对象
				File mockShfile = new File("moco/mock.sh");
				// 文件根目录
				String shFilePath = mockfile.getCanonicalPath();
				// 脚本执行数据
				String data = ". "+shFilePath;
				// 写入数据
				fos.write(data.getBytes());
				// 获取执行文件路径
				exFilePath = mockShfile.getCanonicalPath();
			}
			//使用执行文件
			Process process = runtime.exec(exFilePath);
			Log.info("-------MOCK服务已启动--------------");
			//获取进程输出流
			BufferedReader  bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));  
			//读取到的mock日志内容
			String line = null;
			while ((line = bufferedReader.readLine()) != null) {
				Log.info(line);
			}
			} catch (IOException e) {
				e.printStackTrace();
			}       
		
	}
	
}
